#include <vector>
#include <stack>
#include <fstream>
#include <map>
#include "array/cacheTest.h"
#include "array/ArrayIterator.h"
#include "linearList/LinearList.h"
#include "linearList/ExtendedLinearList.h"
#include "exception/illegalParameterValue.h"
#include "chainNode/Chain.cpp"
#include "chainNode/ExtendedChain.cpp"
#include "chainNode/CircularListWithHeader.cpp"
#include "chainNode/DoublyLinkedList.cpp"
#include "sort/BinSort.h"
#include "sort/RadixSort.h"
#include "matrix/matrix.cpp"
#include "stack/ArrayStack.h"
#include "stack/DerivedArrayStack.h"
#include "stack/stackTest.h"
#include "problems/printMatchedPairs.h"
#include "problems/towersOfHanoi.h"
#include "problems/trainRearrangement.h"
#include "problems/switchBoxWiring.h"
#include "problems/offlineEquivalenceClass.h"
#include "problems/maze.h"
#include "queue/ArrayDeque.h"
//#include "problems/findMinimumPath.h"
#include "problems/labelComponents.h"
#include "dictionary/SortedChain.h"/**/
#include "dictionary/SortedArrayDict.h"
#include "dictionary/SkipNode.h"

#include "hashing/Hash.h"
//#include "application/lzw.h"
//#include "application/reader16.h"
//#include "application/unlzw.h"
//#include "application/lzwApplication.h"
#include "problems/unite/uniteUseTree2.h"
#include "priorityQueue/maxHeap.h"
#include "tree/searchTree/binarySearchTree.h"
#include "test/trueDog.h"
//#include
using namespace std;
int x(){
    return 2;
}
int y(){
    return 3;
}
int main(int argc,char* argv[]) {

//    map<int,int> x;
//    x.insert(pair<int,int>(2,3));
//    x.insert(pair<int,int>(3,4));
//    cout<<x.find(3)->second;
//    trueDog x1;
//    x1.alive();
//    x1.eat();

//    int (*xf)();
//    xf = x;
//    cout<<xf()<<endl;
//    cout<<(xf=y)()<<endl;
//    binarySearchTree<int,int> x;
//    x.insert(pair<const int,int>(30,1));
//    x.insert(pair<const int,int>(5,1));
//    x.insert(pair<const int,int>(2,1));
//    x.insert(pair<const int,int>(40,1));
//    x.insert(pair<const int,int>(35,2));
//    x.insert(pair<const int,int>(32,2));
//    x.insert(pair<const int,int>(31,2));
//    x.insert(pair<const int,int>(33,2));
//    x.insert(pair<const int,int>(80,2));
//    x.insert(pair<const int,int>(60,2));
//    x.insert(pair<const int,int>(85,2));
//    x.erase(5);
//    x.erase(2);
//    x.erase(40);
//    x.ascend();
//    int a[] = {1,3,5,2,3,1,0,0,0,0,9,7,5};
//    int n = 12;
//    heapSort(a,n);
//    for(int i = 1;i<=n;i++){
//        cout<<a[i]<<endl;
//    }
//    initialize2(10);
//    unite2(1,2);
//    unite2(3,4);
//    unite2(1,3);
//    cout << "find(1) = " << find2(1) << " find(2) = " << find2(2) << endl;
//    cout << "find(3) = " << find2(3) << " find(4) = " << find2(4) << endl;
//    cout << "find(5) = " << find2(5) << " find(6) = " << find2(6) << endl;

//    initialize(10);
//    unite(1,2);
//    unite(3,4);
//    unite(1,3);
//    cout << "find(1) = " << find(1) << " find(2) = " << find(2) << endl;
//    cout << "find(3) = " << find(3) << " find(4) = " << find(4) << endl;
//    cout << "find(5) = " << find(5) << " find(6) = " << find(6) << endl;
//    compress_application();
//    ifstream in;
//    string s;
////    cin>>s;
//    s = "cc.txt";
//    char a[100];
//    in.open(s,ios::binary|ios::in);
//    in.read(a,100);
//    int c = in.gcount();
//    while(c!=0){
//        for(int i = 0;i<c;i++){
//            cout<<(int)(a[i])<<" ";
//        }
//        cout<<endl;
//        in.read(a,100);
//        c = in.gcount();
//    }


//    setFiles_unlzw(argc,argv);
//    decompress();
//    reader(argv[0]);
//    setFiles(argc,argv);
//    compress();
//    cout<<(1<<1)<<" "<<(1>>1);
//    HashChains<int,int> x;
//    x.insert(pair<int,int>(1,2));
//    x.insert(pair<int,int>(3,2));
//    x.insert(pair<int,int>(5,1));
//    cout<<x.find(5)->first<<" "<<x.find(5)->second<<endl;
//    x.insert(pair<int,int>(5,5));
//    cout<<x.find(5)->first<<" "<<x.find(5)->second<<endl;
//    SkipList<int,int> z(1000);
//    pair<int, int> p;
//
//    // test insert
//    p.first = 2; p.second = 10;
//    z.insert(p);
//    p.first = 10; p.second = 50;
//    z.insert(p);
//    p.first = 6; p.second = 30;
//    z.insert(p);
//    p.first = 8; p.second = 40;
//    z.insert(p);
//    p.first = 1; p.second = 5;
//    z.insert(p);
//    p.first = 12; p.second = 60;
//    z.insert(p);
//    cout << "The dictionary is " << z << endl;
//    cout << "Its size is " << z.size() << endl;
//
//    // test find
//    cout << "Element associated with 1 is " << z.find(1)->second << endl;
//    cout << "Element associated with 6 is " << z.find(6)->second << endl;
//    cout << "Element associated with 12 is " << z.find(12)->second << endl;

    // test erase
//    z.erase(1);
//    z.erase(2);
//    z.erase(6);
//    z.erase(12);
//    cout << "Deleted 1, 2, 6, 12" << endl;
//    cout << "The dictionary is " << z << endl;
//    cout << "Its size is " << z.size() << endl;
//    SortedDict<int,int> x;
//    x.insert(pair<int,int>(3,4));
//    x.insert(pair<int,int>(3,4));
//    x.insert(pair<int,int>(4,5));
//    cout<<x.finde(4)->first<<" "<<x.finde(4)->second<<endl;
////    x.clear();
//    cout<<x.empty()<<endl;
//    int i = 0;
//    while(i<10)
//        cout<<i<<endl;
//        cout<<i*i<<endl;
//        i++;
//    pairPack<int,int> x;
//    pair<int,int>* e;
////    cout<<x.ele.first<<" "<<x.ele.second<<endl;
////    x.ele.second = 1;
////    cout<<x.ele.first<<" "<<x.ele.second<<endl;
//
////    x.ele = pair<int,int>(2,3);


//    SortedArrayList<int,int> x;
//    x.insert(pair<int,int>(3,4));
//    x.insert(pair<int,int>(4,5));
//    cout<<x.find(4)->first<<" "<<x.find(4)->second<<endl;
//    x.clear();
//    cout<<x.empty()<<endl;

//    SortedChain<int,int> f;
//    f.insert(pair<int,int>(3,4));
//    f.insert(pair<int,int>(4,5));
//    cout<<f.find(4)->first<<" "<<f.find(4)->second<<endl;
//    f.clear();
//    cout<<f.empty()<<endl;


//    SortedChain<int,int> x;
//    x.reInsert(pair<int,int>(3,4));
//    x.reInsert(pair<int,int>(4,5));
//    cout<<x.find(4)->first<<" "<<x.find(4)->second<<endl;
//    x.clear();
//    cout<<x.empty()<<endl;
//    loopFunc();
//    findPath();
//    printPath();
//    position c;
//    c.row =3;
//    c.col =4;
//    ArrayDeque<position> x;
//    x.push_front(c);
//    c.row = 4;
//    x.push_back(c);
//    c.col = 5;
//    x.push_front(c);
//    c.row = 5;
//    x.push_back(c);
//    x.pop_back();
//    x.pop_front();
//    cout<<x.size()<<endl;
//    ArrayDeque<int> x;
//    x.push(3);
//    x.push(5);
//    x.push(19);
//    cout<<x.size()<<endl;
//    x.clear();
//    x.pop();
//    x.pop();
//    x.front();
//    x.pop();
//    cout<<x.size()<<endl;
//    cout<<(-1%8)<<endl;
//    position c;
//    c.row = 3;
//    c.col = 4;
//    ArrayStack<position> x;
//    x.push(c);
//    c.row =4;
//    x.push(c);
//    while(!x.empty()){
//        position p = x.top();
//        cout<<p.row<<" "<<p.col<<endl;
//        x.pop();
//    }
//    offlineEquivalenceClass();
//    printMatchedPairs("(1+2)+(3+4)+(e+(3+9))+(");
//    towersOfHanoi(4,1,2,3);
//    towersOfHanoi(4);
//    int x[] = {0,3,6,9,2,4,7,1,8,5};
//    railroad(x,9,3);
//    int net[] = {1,2,3,4,4,3,2,1};
//    checkBox(net,8);
//    moveAndShow(4,1,2,3);
//    calculate();
//    ArrayList<double> x;
//    x.push_back(3.90);
//    x.push_back(99.21);
//    cout<<x<<endl;
//    x.set(1,20202.820);
//    x.push_back(2299.099);
//    cout<<x<<endl;
//    Chain<double> x;
//    x.reInsert(0,190);
//    x.reInsert(1,10);
//    cout<<x<<endl;
//    x.set(1,190);
//    cout<<x<<endl;
//    x.reInsert(2,180);
//    cout<<x<<endl;
//    matrix<int> x(2,3);
//    matrix<int> y(3,2);
//    cin>>x;
//    matrix<int> y = x.tranpose();

//    cin>>y;
//
//    cout<<(x*y)<<endl;
//    cout<<x<<endl;
//    cout<<y<<endl;
//    cout<<(x*y)<<endl;
//    cout<<radixSort::preferNum(999,20)<<endl;
//    Chain<int> x;
//    x.reInsert(0,0);
//    x.reInsert(1,2);
//    x.reInsert(2,0);
//    x.reInsert(3,2);
//    x.binSort(2);
//    x.output(cout);
//    DoublyLinkedList<int> x;
//    x.push_back(0);
//    x.push_back(3);
//    x.push_back(5);
//    cout<<x.indexOf(3)<<endl;
//    cout<<"reInsert"<<endl;
//    x.reInsert(0,9);
//    x.reInsert(3,8);
//    x.erase(3);
//    x.erase(0);
//    cout<<x.get(2)<<endl;
//    cout<<x.empty()<<endl;
//    x.clear();
//    cout<<x.size()<<" "<<x.empty();
//    cout<<x<<endl;
//    CircularListWithHeader<int> x;
//    cout<<x.size()<<endl;
//    cout<<x.empty()<<endl;
//    x.reInsert(0,2);
//    x.push_back(3);
//    x.output(cout);
//    cout<<endl;
//    cout<<x.indexOf(5)<<endl;
//    x.erase(1);
//    cout<<endl;
//    cacheTest();
//    ArrayList<int> x;
//    for(int i = 0;i<12;i++){
//        x.reInsert(0,i);
//    }
//    x.output(cout);
//    cout<<endl;
//    ArrayIterator<int> it = x.begin();
//    cout<<*(++it)<<endl;
    return 0;
}
